home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / OpenGL 1.0 SDK / Source / Examples / aux / samples / point.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-05-18  |  3.5 KB  |  194 lines  |  [TEXT/CWIE]

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "tk.h"
  5.  
  6.  
  7. #define CI_RED TK_RED
  8. #define CI_ANTI_ALIAS_GREEN 16
  9. #define CI_ANTI_ALIAS_YELLOW 32
  10. #define CI_ANTI_ALIAS_RED 48
  11.  
  12.  
  13. GLenum rgb, doubleBuffer, directRender, windType;
  14. GLint windW, windH;
  15.  
  16. GLenum mode;
  17. GLint size;
  18. float point[3] = {
  19.     1.0, 1.0, 0.0
  20. };
  21.  
  22.  
  23. static void Init(void)
  24. {
  25.     GLint i;
  26.  
  27.     glClearColor(0.0, 0.0, 0.0, 0.0);
  28.  
  29.     glBlendFunc(GL_SRC_ALPHA, GL_ZERO);
  30.  
  31.     if (!rgb) {
  32.     for (i = 0; i < 16; i++) {
  33.         tkSetOneColor(i+CI_ANTI_ALIAS_RED, i/15.0, 0.0, 0.0);
  34.         tkSetOneColor(i+CI_ANTI_ALIAS_YELLOW, i/15.0, i/15.0, 0.0);
  35.         tkSetOneColor(i+CI_ANTI_ALIAS_GREEN, 0.0, i/15.0, 0.0);
  36.     }
  37.     }
  38.  
  39.     mode = GL_FALSE;
  40.     size = 1;
  41. }
  42.  
  43. static void Reshape(int width, int height)
  44. {
  45.  
  46.     windW = (GLint)width;
  47.     windH = (GLint)height;
  48.  
  49.     glViewport(0, 0, width, height);
  50.  
  51.     glMatrixMode(GL_PROJECTION);
  52.     glLoadIdentity();
  53.     gluOrtho2D(-windW/2, windW/2, -windH/2, windH/2);
  54.     glMatrixMode(GL_MODELVIEW);
  55. }
  56.  
  57. static GLenum Key(int key, GLenum mask)
  58. {
  59.  
  60.     switch (key) {
  61.       case TK_ESCAPE:
  62.     tkQuit();
  63.       case TK_1:
  64.     mode = !mode;
  65.     break;
  66.       case TK_W:
  67.     size++;
  68.     break;
  69.       case TK_w:
  70.     size--;
  71.     if (size < 1) {
  72.         size = 1;
  73.     }
  74.     break;
  75.       case TK_LEFT:
  76.     point[0] -= 0.25;
  77.     break;
  78.       case TK_RIGHT:
  79.     point[0] += 0.25;
  80.     break;
  81.       case TK_UP:
  82.     point[1] += 0.25;
  83.     break;
  84.       case TK_DOWN:
  85.     point[1] -= 0.25;
  86.     break;
  87.       default:
  88.     return GL_FALSE;
  89.     }
  90.     return GL_TRUE;
  91. }
  92.  
  93. static void Draw(void)
  94. {
  95.  
  96.     glClear(GL_COLOR_BUFFER_BIT);
  97.  
  98.     TK_SETCOLOR(windType, TK_YELLOW);
  99.     glBegin(GL_LINE_STRIP);
  100.     glVertex2f(-windW/2, 0);
  101.     glVertex2f(windW/2, 0);
  102.     glEnd();
  103.     glBegin(GL_LINE_STRIP);
  104.     glVertex2f(0, -windH/2);
  105.     glVertex2f(0, windH/2);
  106.     glEnd();
  107.  
  108.     if (mode) {
  109.     glEnable(GL_BLEND);
  110.     glEnable(GL_POINT_SMOOTH);
  111.     } else {
  112.     glDisable(GL_BLEND);
  113.     glDisable(GL_POINT_SMOOTH);
  114.     }
  115.  
  116.     glPointSize(size);
  117.     if (mode) {
  118.     (rgb) ? glColor3f(1.0, 0.0, 0.0) : glIndexf(CI_ANTI_ALIAS_RED);
  119.     } else {
  120.     (rgb) ? glColor3f(1.0, 0.0, 0.0) : glIndexf(CI_RED);
  121.     }
  122.     glBegin(GL_POINTS);
  123.     glVertex3fv(point);
  124.     glEnd();
  125.  
  126.     glDisable(GL_POINT_SMOOTH);
  127.  
  128.     glPointSize(1);
  129.     TK_SETCOLOR(windType, TK_GREEN);
  130.     glBegin(GL_POINTS);
  131.     glVertex3fv(point);
  132.     glEnd();
  133.  
  134.     glFlush();
  135. }
  136.  
  137. static GLenum Args(int argc, char **argv)
  138. {
  139.     GLint i;
  140.  
  141.     rgb = GL_TRUE;
  142.     doubleBuffer = GL_FALSE;
  143.     directRender = GL_TRUE;
  144.  
  145.     for (i = 1; i < argc; i++) {
  146.     if (strcmp(argv[i], "-ci") == 0) {
  147.         rgb = GL_FALSE;
  148.     } else if (strcmp(argv[i], "-rgb") == 0) {
  149.         rgb = GL_TRUE;
  150.     } else if (strcmp(argv[i], "-sb") == 0) {
  151.         doubleBuffer = GL_FALSE;
  152.     } else if (strcmp(argv[i], "-db") == 0) {
  153.         doubleBuffer = GL_TRUE;
  154.     } else if (strcmp(argv[i], "-dr") == 0) {
  155.         directRender = GL_TRUE;
  156.     } else if (strcmp(argv[i], "-ir") == 0) {
  157.         directRender = GL_FALSE;
  158.     } else {
  159.         printf("%s (Bad option).\n", argv[i]);
  160.         return GL_FALSE;
  161.     }
  162.     }
  163.     return GL_TRUE;
  164. }
  165.  
  166. void main(int argc, char **argv)
  167. {
  168.  
  169.     if (Args(argc, argv) == GL_FALSE) {
  170.     tkQuit();
  171.     }
  172.  
  173.     windW = 300;
  174.     windH = 300;
  175.     tkInitPosition(30, 60, windW, windH);
  176.  
  177.     windType = (rgb) ? TK_RGB : TK_INDEX;
  178.     windType |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
  179.     windType |= (directRender) ? TK_DIRECT : TK_INDIRECT;
  180.     tkInitDisplayMode(windType);
  181.  
  182.     if (tkInitWindow("Point Test") == GL_FALSE) {
  183.     tkQuit();
  184.     }
  185.  
  186.     Init();
  187.  
  188.     tkExposeFunc(Reshape);
  189.     tkReshapeFunc(Reshape);
  190.     tkKeyDownFunc(Key);
  191.     tkDisplayFunc(Draw);
  192.     tkExec();
  193. }
  194.